/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tcc.view;

import br.com.tcc.dao.DAOReceitasDespesas;
import br.com.tcc.item.view.ReceitasDespesasItemView;
import br.com.tcc.modelo.ReceitasDespesas;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;

/**
 * FXML Controller class
 *
 * @author Edidelson
 */
public class ReceitasDespesasController implements Initializable, ControlledScreen {

    private ObservableList<ReceitasDespesasItemView> list = FXCollections.observableArrayList();

    ScreensController myController;
    @FXML
    TextField txtCodigo = new TextField();
    @FXML
    TextField txtDescricao = new TextField();
    @FXML
    private TableColumn colCodigo;
    @FXML
    private TableColumn colDescricao;
    @FXML
    private TableView tbReceitasDespesas;
    private ReceitasDespesas receitasDespesas;

    /**
     * Initializes the controller class.
     * @param url
     * @param rb
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        cellColumns();
        iniciar();
    }

    @Override
    public void setScreenParent(ScreensController screenPage) {
        myController = screenPage;
    }

    public void cellColumns() {
        colCodigo.setCellValueFactory(new PropertyValueFactory("codigo"));
        colDescricao.setCellValueFactory(new PropertyValueFactory("descricao"));
    }

    private void iniciar() {
        tbReceitasDespesas.getItems().clear();
        DAOReceitasDespesas dao = new DAOReceitasDespesas();
        List<ReceitasDespesas> receitasDespesases = dao.getLista();
        receitasDespesases.stream().map((receitas) -> new ReceitasDespesasItemView(receitas)).forEach((itemView) -> {
            tbReceitasDespesas.getItems().add(itemView);
        });
    }

    @FXML
    private void preencherCampos(MouseEvent event) {
        ReceitasDespesasItemView itemView = (ReceitasDespesasItemView) tbReceitasDespesas.getSelectionModel().getSelectedItem();
        if (itemView != null) {
            receitasDespesas = new DAOReceitasDespesas().consultar(Integer.parseInt(itemView.getCodigo()));
            receitasDespesas.setCodigo(Integer.parseInt(itemView.getCodigo()));
            receitasDespesas.setDescricao(itemView.getDescricao());
            txtDescricao.setText(itemView.getDescricao());
            txtCodigo.setText(itemView.getCodigo());
        }
    }

    @FXML
    private void adicionar(ActionEvent event) {
        if (receitasDespesas == null) {
            receitasDespesas = new ReceitasDespesas();
            receitasDespesas.setDescricao(txtDescricao.getText());
            DAOReceitasDespesas dao = new DAOReceitasDespesas();
            dao.adicionar(receitasDespesas);
            iniciar();
            limpar();
        }
    }

    @FXML
    private void alterar(ActionEvent event) {
        if (receitasDespesas != null) {
            receitasDespesas.setCodigo(Integer.valueOf(txtCodigo.getText()));
            receitasDespesas.setDescricao(txtDescricao.getText());
            DAOReceitasDespesas dao = new DAOReceitasDespesas();
            dao.alterar(receitasDespesas);
            iniciar();
            limpar();
        }
    }

    @FXML
    private void remover(ActionEvent event) {
        if (receitasDespesas != null) {
            DAOReceitasDespesas dao = new DAOReceitasDespesas();
            dao.remover(receitasDespesas);
            iniciar();
            limpar();
        }
    }

    public void limpar() {
        txtCodigo.setText("");
        txtDescricao.setText("");
        receitasDespesas = null;
    }

}
